package cn.edu.zsc.rbac.service.array;

import cn.edu.zsc.rbac.domain.dto.RoleDto;
import cn.edu.zsc.rbac.domain.entity.Role;
import cn.edu.zsc.rbac.domain.vo.RoleVo;
import cn.edu.zsc.rbac.domain.vo.Result;
import cn.edu.zsc.rbac.service.IRoleService;
import cn.edu.zsc.rbac.service.IUserService;
import cn.edu.zsc.rbac.util.SingletonFactory;

import java.time.LocalDateTime;


/**
 * 业务层-角色
 *
 */
@Deprecated
public class RoleService extends BaseService<Role, RoleDto, RoleVo> implements IRoleService {

    private IUserService userService;



    private RoleService() {
        data = new Role[DATA_SIZE+1];
        temp = new RoleVo[DATA_SIZE];
    }


    @Override
    RoleVo converToVo(Role role) {
        return new RoleVo(role.getId(), role.createAt, role.updateAt,role.name, role.dataScope);
    }

    @Override
    public Role createEntity(RoleDto dto, int id) {
        LocalDateTime now = LocalDateTime.now();
        return new Role(id,now,now,dto.name, dto.dataScope);
    }

    @Override
    void updateEtity(RoleDto dto, Role role) {
        role.updateAt = LocalDateTime.now();
        role.name = dto.name;
        role.dataScope = dto.dataScope;
    }

    @Override
    public Result delete(int id) {
        if (!existsById(id)) {
            return Result.failure("删除失败，不存在该数据");
        }
        if (userService==null) {
            userService  = SingletonFactory.getInstance(UserService.class);
        }
        if (userService.roleInUse(id)) {
            return Result.failure("删除失败，还有用户具有该角色，不能删除");
        }
        data[id] = null;
        return Result.success("删除成功！", null);
    }
}

